"""
1. 括号匹配
    给一个字符串， 包括小括号、中括号、大括号， 求该字符串中的括号是否匹配。
    例如：
        ()()[]{}
        ({[()]})
        [](
        
        ({[(])}) # 这种不是匹配的   
左括号进栈， 和最后一个比较
例：
    栈：({[()]})
    ( 入
    ({
    ({[
    ({[(
    
    匹配到 )
    出
    ({[
    依次进行
"""
class Stack:
    def __init__(self):
        self.__stack = []
    
    def pop(self):
        if self.__stack:
            return self.__stack.pop()
        return None
    
    def push(self, data):
        self.__stack.append(data)
    
    def get_top(self):
        if self.__stack:
            return self.__stack[-1]
        return None
    
    def get_stack(self):
        return self.__stack
    
        
def check(str_):
    tmp = ["(", "[", "{"]
    stack = Stack()
    for i in str_:
        top = stack.get_top()
        if i in tmp:
            stack.push(i)
        elif top:
            if chr(ord(top)+1) == i or chr(ord(top)+2) == i:
                stack.pop()
            else:
                return False
        else:
            return False
    if not stack.get_stack():
        return True


result = check("}({[()]})")
print(result)
